package proyectoX.src.entidades;

import javax.swing.ImageIcon;

import proyectoX.src.aplicacion.Nivel;
import proyectoX.src.armas.LaserEnemigo;
import proyectoX.src.armas.arma;

import java.awt.Point;

/**
 * Clase abstracta que representa a cualquier nave enemiga.
 *
 */
public abstract class Enemiga extends nave {
	
	protected int puntaje;
	protected arma laserE;

	/**
	 * Inicializa todos los atributos de la nave enemiga pasados por parámetro. 
	 * 
	 * @param nivel Nivel actual.
	 * @param velocidad Velocidad de desplazamiento.
	 * @param ref Imagen de la nave.
	 * @param puntaje Puntaje otrogado al recibir un disparo.
	 * @param puntosVida Puntos de vida de esta nave enemiga.
	 */
	protected Enemiga(Nivel nivel,int velocidad, ImageIcon ref,int puntaje,int puntosVida) {
		super(nivel,velocidad,ref,puntosVida);
		this.puntaje=puntaje;
		laserE= new LaserEnemigo(nivel);
	}

	/**
	 * Devuelve el puntaje que otorga esta nave al recibir un disparo.
	 * @return Puntaje de la nave.
	 */
	public int getPuntaje(){
		return puntaje;
	}

	/**
	 * Al colisionar esta nave muere y daña a la nave jugadora en la cantidad de puntos de vida
	 * que tenga esta nave en ese momento.
	 */
	public void chocar(){
		Principal n= nivel.obtenerNavePrincipal();	
		int p=n.getPuntosDeVida();				
		if(p>=getPuntosDeVida()) {			
			muerte();			
		}		
		n.RecibirChoque(this);
	}

	/**
	 * Al morir debe avisar a nivel para que la elimine y actualice las bajas.
	 */
	public void muerte() {
		nivel.actualizarBajas();
		nivel.eliminarEnemiga(this);		
	}

	/**
	 * Método para definir el desplazamiento de una nave enemiga en particular.
	 */
	public abstract void mover();

	/**
	 * Método para disparar el arma de la nave.
	 * @param location Punto de referencia para crear el disparo.
	 */
	public abstract void disparar(Point location);

}
